home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Format CD 33
/
Amiga Format AFCD33 (Issue 117, Dec 1998).iso
/
-seriously_amiga-
/
graphics
/
splitmpegppc
/
src
/
stream.h
< prev
next >
Wrap
Text File
|
1998-09-07
|
5KB
|
148 lines
/*
* Copyright (c) 1994 Michael Simmons.
* All rights reserved.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose, without fee, and without written agreement is
* hereby granted, provided that the above copyright notice and the following
* two paragraphs appear in all copies of this software.
*
* IN NO EVENT SHALL MICHAEL SIMMONS BE LIABLE TO ANY PARTY FOR
* DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
* OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF MICHAEL SIMMONS
* HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* THE MICHAEL SIMMONS SPECIFICALLY DISCLAIMS ANY WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
* ON AN "AS IS" BASIS, AND MICHAEL SIMMONS HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
* I can be contacted via
* Email: michael@ecel.uwa.edu.au
* Post: P.O. Box 506, NEDLANDS WA 6009, AUSTRALIA
*
* Amigaversion by Tobias Seiler in 1997
* Email: tabs@blader.com
*/
/* MPEG Stream Constants */
/* Start codes. */
#define PICTURE_START_CODE 0x00000100
#define SLICE_MIN_START_CODE 0x00000101
#define SLICE_MAX_START_CODE 0x000001af
#define RESERVED_START_CODE_1 0x000001b0
#define RESERVED_START_CODE_2 0x000001b1
#define USER_START_CODE 0x000001b2
#define SEQ_START_CODE 0x000001b3
#define EXT_START_CODE 0x000001b5
#define RESERVED_START_CODE_3 0x000001b6
#define SEQ_END_CODE 0x000001b7
#define GOP_START_CODE 0x000001b8
#define ISO_11172_END_CODE 0x000001b9
#define PACK_START_CODE 0x000001ba
#define SYSTEM_HEADER_START_CODE 0x000001bb
#define RESERVED_STREAM 0x000001bc
#define PRIVATE_STREAM_1 0x000001bd
#define PADDING_STREAM 0x000001be
#define PRIVATE_STREAM_2 0x000001bf
#define AUDIO_STREAM_0 0x000001c0
#define AUDIO_STREAM_31 0x000001df
#define VIDIO_STREAM_0 0x000001e0
#define VIDIO_STREAM_15 0x000001ef
#define RESERVED_DATA_STREAM_0 0x000001f0
#define RESERVED_DATA_STREAM_15 0x000001ff
/* other stuff */
#define MAX_NUM_STREAMS 43
/* Picture_coding_type */
#define I_TYPE 1
#define P_TYPE 2
#define B_TYPE 3
#define D_TYPE 4
/* Macros used with macroblock address decoding. */
#define MB_STUFFING 34
#define MB_ESCAPE 35
/* Special values for DCT Coefficients */
#define END_OF_BLOCK 62
#define ESCAPE 61
/* Audio */
#define AUDIO_HEADER_SYNC 0xfff
#define LAYER_I 3
#define LAYER_II 2
#define LAYER_III 1
#define LAYER_RESERVED 0
#define SAMPLE_FREQ_44 0
#define SAMPLE_FREQ_48 1
#define SAMPLE_FREQ_32 2
#define SAMPLE_FREQ_RESERVED 3
#define MODE_STEREO 0
#define MODE_JOINT_STEREO 1
#define MODE_DUAL_CHANNEL 2
#define MODE_SINGLE_CHANNEL 3
#define EMPHASIS_NONE 0
#define EMPHASIS_50_15 1
#define EMPHASIS_RESERVED 2
#define EMPHASIS_CCITTJ17 3
typedef struct {
FILE *stream;
unsigned int STD_scale; /* 1 bit */
unsigned int STD_size; /* 13 bits */
unsigned int PTS_hibit; /* 1 bit */
unsigned int PTS; /* 32 bits */
unsigned int DTS_hibit; /* 1 bit */
unsigned int DTS; /* 32 bits */
} StreamInfo;
typedef struct {
unsigned int SCR_hibit; /* 1 bit */
unsigned int SCR; /* 32 bits */
unsigned int mux_rate; /* 22 bits */
} Pack_Header;
typedef struct {
unsigned int header_length; /* 16 bits */
unsigned int rate_bound; /* 22 bits */
unsigned int audio_bound; /* 6 bits */
unsigned int fixed_flag; /* 1 bit */
unsigned int CSPS_flag; /* 1 bit */
unsigned int audio_lock_flag;/* 1 bit */
unsigned int video_lock_flag;/* 1 bit */
unsigned int video_bound; /* 5 bits */
unsigned int reserved_byte; /* 8 bits */
unsigned int STD_flag[MAX_NUM_STREAMS];
unsigned int STD_scale_bound[MAX_NUM_STREAMS];
unsigned int STD_size_bound[MAX_NUM_STREAMS];
} System_Header;
typedef struct {
unsigned int stream_id; /* 8 bits */
unsigned int packet_length; /* 16 bits */
unsigned int STD_flag; /* 1 bit */
unsigned int STD_scale; /* 1 bit */
unsigned int STD_size; /* 13 bits */
unsigned int PTS_Flag; /* 1 bit */
unsigned int PTS_hibit; /* 1 bit */
unsigned int PTS; /* 32 bits */
unsigned int DTS_Flag; /* 1 bit */
unsigned int DTS_hibit; /* 1 bit */
unsigned int DTS; /* 32 bits */
unsigned int buffer_size;
char *buffer;
} Packet;